/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.ucase.casemain.service;

import com.icinfo.cloud.provider.punish.common.documentdataload.dto.CasePartiesQueryDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.dto.*;
import com.icinfo.cloud.provider.punish.ucase.casemain.model.CasePartiesRecord;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.*;
import com.icinfo.cloud.provider.punish.ucase.investigateevidence.vo.CasePartyMsgVo;
import com.icinfo.framework.common.web.Result;
import com.icinfo.framework.core.service.BaseService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 描述: 案件当事人表-TRJ case_parties_info 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年02月15日
 */
public interface ICasePartiesRecordService extends BaseService {

    /**
     * 【V1.0.0】描述：保存案件当事人信息
     *
     * @param saveDto {@link CasePartiesRecordDto}
     * @return {@link Result <String>} 保存结果
     * @author xiangyuyu
     * @date 2022-02-18 16:02
     */
    int saveCasePartiesInfo(CasePartiesRecordDto saveDto);

    /**
     * 【V1.0.0】描述：获取案件当事人信息分页列表
     *
     * @param pageRequest {@link CasePartiesRecordPageRequest}
     * @return {@link Result<List< CasePartiesRecordVo >>} 案件当事人信息分页列表
     * @author xiangyuyu
     * @date 2022-02-18 16:02
     */
    List<CasePartiesRecordVo> getCasePartiesInfoPageList(CasePartiesRecordPageRequest pageRequest);

    /**
     * 【V2.0.0】描述：获取案件当事人信息列表
     *
     * @param queryDto {@link CasePartiesRecordQueryDto}
     * @return {@link List< CasePartiesInfoVo >} 案件当事人信息列表
     * @author xiangyuyu
     * @date 2022-02-18 16:02
     */
    List<CasePartiesInfoVo> getCasePartiesInfoList(CasePartiesRecordQueryDto queryDto);

    /**
     * 描述：获取当事人id、名称信息
     *
     * @param caseId 案件id
     * @return Map<String, String>  当事人id、名称信息（多当事人时id、name逗号分隔）
     * 返回示例：{partyId:"1001",partyName:"张三"}
     * @author xiangyuyu
     * @date 2022-05-26 15:49
     */
    Map<String, String> getCasePartyIdNameInfo(String caseId);

    /**
     * 【V1.0.0】描述：根据案件id查询案件当事人信息
     *
     * @param caseId 案件id
     * @return {@link List< CasePartiesRecordVo >} 案件当事人信息
     * @author xiangyuyu
     * @date 2022-02-18 16:02
     */
    List<CasePartiesRecordVo> getCasePartiesInfo(String caseId);

    /**
     * 【V2.0.0】描述：根据案件id查询案件展示的第一个当事人信息
     *
     * @param caseId 案件id
     * @return {@link List< CasePartiesRecordVo >} 案件当事人信息
     * @author xiangyuyu
     * @date 2022-02-18 16:02
     */
    CasePartiesRecordVo getFirstShowCasePartiesInfo(String caseId);


    /**
     * 【V1.0.0】描述：删除案件当事人信息
     *
     * @param id 主键id
     * @return {@link Result<String>} 删除结果
     * @author xiangyuyu
     * @date 2022-02-18 16:02
     */
    Result<String> removeCasePartiesInfo(String id);

    /**
     * 【V1.0.0】描述：根据案件id查询案件当事人详细信息（具体返回个人/法人信息）
     *
     * @param caseId 案件id
     * @return {@link CasePartiesDetailInfoVo} 案件当事人详细信息（具体返回个人/法人信息）
     * @author xiangyuyu
     * @date 2022-02-22 10:57
     */
    CasePartiesDetailInfoVo getCasePartiesDetailInfo(String caseId);

    /**
     * 根据案件ID和partyId获取当事人信息
     * @param caseId
     * @return
     */
    CasePartiesDetailInfoVo getCasePartiesDetailInfoByCaseIdAndPartyId(String caseId, String partyId);

    /**
     * 【V1.0.0】描述：根据案件id查询案件当事人详细信息（具体返回个人/法人信息）
     *
     * @param caseId 案件id
     * @return {@link CasePartiesDetailInfoVo} 案件当事人详细信息（具体返回个人/法人信息）
     * @author xiangyuyu
     * @date 2022-02-22 10:57
     */
    CasePartiesDetailInfoVo getCaseAdditionalPartiesDetailInfo(String caseId);

    /**
     * 获取授权委托人+当事人信息
     *
     * @param caseId  案件id
     * @param partyId 当事人id
     * @return List
     * @author lxj
     * @date 2022/3/2
     **/
    List<CasePartyMsgVo> getAuthorizedPersonAndPartyList(String caseId, String partyId);

    /**
     * 描述：根据当事人类别、证件号和案件id查询当事人记录
     *
     * @param queryDto 查询dto
     * @return {@link CasePartiesRecord }
     * @author shishengyao
     * @date 2022/05/19
     */
    CasePartiesRecord getCasePartiesRecordByCaseIdAndCertNo(CasePartiesRecordSingleQueryDto queryDto);

    /**
     * 描述：删除案件当事人
     *
     * @param caseId 案件id
     * @return boolean
     * @author shishengyao
     * @date 2022/05/19
     */
    boolean delCasePartiesRecordByCaseId(String caseId);

    /**
     * 获取当事人信息列表
     *
     * @param queryDto 查询dto
     * @return {@link List<Map<String, Object>> }
     * @author shishengyao
     * @date 2022/05/26
     */
    List<Map<String, Object>> getCasePartiesDetailInfoList(CasePartiesQueryDto queryDto);

    /**
     * 根据案件id获取CasePartiesInfoVo
     *
     * @param caseId
     * @return {@link List< CasePartiesInfoVo>}
     * @author liyafeng
     * @date 2022/5/28
     */
    List<CasePartiesInfoVo> getCasePartiesInfoVo(String caseId, String partyId);

    /**
     * 描述：根据证件号和当事人类别查询当事人信息
     *
     * @param caseId            用例id
     * @param partyIdentityCode 当事人证件号
     * @param partyType         当事人类别
     * @param partyIdentityType 当事人证件类型
     * @return {@link CasePartiesRecord }
     * @author shishengyao
     * @date 2023/03/29
     */
    CasePartiesRecord getCasePartiesRecordByIdentityCode(String caseId , String partyIdentityCode, String partyType, String partyIdentityType);

    /**
     * 【V1.0.0】描述：根据案件id查询案件当事人信息(列表为空时直接返回不校验)
     *
     * @param caseId 案件id
     * @return {@link List< CasePartiesRecordVo >} 案件当事人信息
     * @author xiangyuyu
     * @date 2022-02-18 16:02
     */
    List<CasePartiesRecordVo> getCasePartiesInfoVoList(String caseId);
    /**
     * 获取当事人信息(案件详情-新)
     * @author liyafeng
     * @date 2022/8/3
      * @param caseId
     * @return {@link List< CaseDetailPartiesInfoVo>}
     */
    List<CaseDetailPartiesInfoVo> getCaseDetailPartyInfo(String caseId);

    /**
     * 【V1.0.0】描述：根据案件id和partyId查询案件当事人信息
     *
     * @param caseId  案件id
     * @param partyId 当事人id
     * @return {@link CasePartiesRecordVo }
     * @author shishengyao
     * @date 2022/08/16
     */
    CasePartiesRecordVo getCasePartiesInfoByPartyId(String caseId,String partyId);

    /**
     * 【1.10.0】描述：根据案件id集合查询当事人信息
     *
     * @param caseIds {@link Set<String>}
     * @return {@link HashMap<String, List<CasePartiesInfoVo>>}
     * @author cds
     * @date 2022/12/9
     * @version 1.10.0
     */
    Map<String, List<CasePartiesInfoVo>> listCasePartiesRecordByCaseIds(Set<String> caseIds);

    /**
     * 获取当事人 姓名
     *
     * @param partyIds 当事人id，多个逗号分割
     * @return 当事人姓名，多个逗号 分割
     * @author lilihao
     * @date 2022/12/4 22:47
     */
    String getPartyNameByPartyIds(String partyIds);

    /**
     * 根据案件id获取当事人姓名，多当事人  用 “张三等几个”
     * @param caseId
     * @return
     */
    String getPartyNamesByCaseId(String caseId);

    /**
     * 描述：删除案件当事人
     *
     * @param partyId 方id
     * @return int
     * @author shishengyao
     * @date 2023/03/25
     */
    int delCasePartiesRecordByPartyId(String partyId);

    /**
     * 查询案件个人当事人
     *
     * @param caseId 用例id
     * @return {@link List<CasePartyRecordAdjustPersonSaveDto> }
     * @author shishengyao
     * @date 2023/03/27
     */
    List<CasePartyRecordAdjustPersonSaveDto> getCasePartiesLegalInfoDtoByCaseId(String caseId);

    /**
     * 根据caseId获取partyId,多当事人走拼接
     * @author liyafeng
     * @date 2023/3/21
      * @param caseId
     * @return {@link String}
     */
    String getPartIdsByCaseId(String caseId);
}
